<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script src="./data.js"></script>
    <script>
      // 数据在data.js文件中
      // 请完成以下任务：
      // 直接创建函数,然后在运行时传入数据就行
      // 例如
      // function foo(arr) {
      // ...
      // }
      // var result = foo(data)
      // console.log(result)

      //------------------------------------------------------------------------------------------
      // 1.匹配一个由字母和数字组成的字符串，长度为6到12个字符。
      function oneTest(arr) {
        const regex = /^[a-zA-Z0-9]{6,12}$/;
        arr.forEach((item) => {
          if (regex.test(item)) {
            console.log(`${item} - 匹配成功`);
          } else {
            console.log(`${item} - 不成功`);
          }
        });
      }
      // oneTest(OneTitle);

      // 2.匹配一个有效的邮箱地址。
      function twoTest(arr) {
        // const Username = / ^[\w-]+@\w+(\.\w+){1,}$ /;
        const Username = /\b[\w]+@[\w]+\.[A-Za-z]{2,4}\b/;
        arr.forEach((item) => {
          if (Username.test(item)) {
            console.log(`${item} - 匹配成功`);
          } else {
            console.log(`${item} - 不成功`);
          }
        });
      }
      // twoTest(TwoTitle);
      // 错误：\w 匹配任何字母数字，包括下划线（等价于[A-Za-z0-9_]）。
      // console.log(/\w/.test("_")); // true
      // 下划线也会被包含进去
      // 没有严格使用什么开头什么结尾，这样会导致 $@$@$a@121.com 匹配成功
      // 错误 重做

      // 3.匹配手机号规则
      function threeTest(arr) {
        const regex = /^1[3-9]\d{9}$/;
        arr.forEach((item) => {
          if (regex.test(item)) {
            console.log(`${item} - 匹配成功`);
          } else {
            console.log(`${item} - 不成功`);
          }
        });
      }
      // threeTest(ThreeTitle);

      // 4.匹配文件名字
      function fourTest(arr) {
        const regex = /^[a-zA-Z0-9]+\.(txt|js|jsx)$/;
        arr.forEach((item) => {
          if (regex.test(item)) {
            console.log(`${item} - 匹配成功`);
          } else {
            console.log(`${item} - 不成功`);
          }
        });
      }
      // fourTest(FourTitle);

      // 5.匹配日期
      function fiveTest(arr) {
        const regex =
          /\d{4}\/\d{2}\/\d{2}\b|\b\d{2}-\d{2}-\d{4}\b|\b\d{4}\.\d{2}\.\d{2}/;
        arr.forEach((item) => {
          if (regex.test(item)) {
            console.log(`${item} - 匹配成功`);
          } else {
            console.log(`${item} - 不成功`);
          }
        });
      }
      // fiveTest(FiveTitle);

      // 6.去掉字符串中的空格
      function sixTest(arr) {
        const regex = /\s+/g;
        const replacement = " ";
        arr.forEach((item) => {
          if (regex.test(item)) {
            console.log(`${item} 匹配成功`);
          } else {
            console.log(`${item} 不成功`);
          }
        });
      }
      // sixTest(SixTitle);
      // 没修改重做
      // 尝试给你解题思路，获取的单个数据进行遍历，每个字符串进行判断，是空格就修改，替换，然后重新保存到一个新数组里面

      // 7.匹配弱密码
      function sevenTest(arr) {
        const regex = /^[a-zA-Z0-9]{6,16}$/;

        arr.forEach((item) => {
          if (regex.test(item)) {
            console.log(`${item} - 匹配成功`);
          } else {
            console.log(`${item} - 不成功`);
          }
        });
      }
      // sevenTest(SevenTitle);

      // 8.匹配强密码
      function eightTitle(arr) {
        const regex =
          /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[a-zA-Z\d!@#$%^&*()_+]{6,}$/;
        arr.forEach((item) => {
          if (regex.test(item)) {
            console.log(`${item} - 匹配成功`);
          } else {
            console.log(`${item} - 不成功`);
          }
        });
      }
      // eightTitle(EightTitle);
      // 另解：^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@\.#$%^&*? ]).*$
      //       (?=.{6,}): 这是一个正向前瞻断言，它确保在当前位置之后的字符串中至少包含6个字符。.{6,} 表示匹配任意字符（除换行符）至少6次，但并不会在匹配过程中消耗任何字符。换句话说，它只是检查字符串的长度是否至少为6个字符，而不会实际匹配这些字符。

      // (?=.*\d): 这也是一个正向前瞻断言，它确保在当前位置之后的字符串中至少包含一个数字。.* 匹配任意字符（除换行符）零次或多次，直到碰到一个数字 \d。这样就确保了至少有一个数字存在于字符串中。

      // 另解
      // function eightTitle(arr) {
      //   const lowercaseRegex = /[a-z]/;
      //   const uppercaseRegex = /[A-Z]/;
      //   const digitRegex = /\d/;
      //   const specialCharRegex = /[!@#$%^&*()_+]/;

      //   arr.forEach((item) => {
      //     const hasLowercase = lowercaseRegex.test(item);
      //     const hasUppercase = uppercaseRegex.test(item);
      //     const hasDigit = digitRegex.test(item);
      //     const hasSpecialChar = specialCharRegex.test(item);

      //     if (
      //       hasLowercase &&
      //       hasUppercase &&
      //       hasDigit &&
      //       hasSpecialChar &&
      //       item.length >= 6
      //     ) {
      //       console.log(`${item} - 匹配成功`);
      //     } else {
      //       console.log(`${item} - 不成功`);
      //     }
      //   });
      // }

      // 9.匹配时间
      function nineTest(arr) {
        const regex = /^(0\d|1\d|2[0-3]):([0-5]\d):([0-5]\d)$/;
        arr.forEach((item) => {
          if (regex.test(item)) {
            console.log(`${item} - 匹配成功`);
          } else {
            console.log(`${item} - 不成功`);
          }
        });
      }
      // nineTest(NineTitle);

      // 10.把数组里面所有的Godless改成BestMyself
      function tenTest(arr) {
        const regex = /\bGodless\b/g;
        const replacement = "BestMyself匹配成功";
        arr.forEach((item) => {
          if (regex.test(item)) {
            console.log(`${item} 匹配成功`);
          } else {
            console.log(`${item} 不成功`);
          }
        });
      }
      tenTest(TenTitle);
      // 没修改 重做
    </script>
  </body>
</html>
